/*
 * Licensed to the Apache Software Foundation (ASF) under one or more
 * contributor license agreements.  See the NOTICE file distributed with
 * this work for additional information regarding copyright ownership.
 * The ASF licenses this file to You under the Apache License, Version 2.0
 * (the "License"); you may not use this file except in compliance with
 * the License.  You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package org.apache.fontbox.cff;


/**
 * This is specialized CFFCharset. It's used if the CharsetId of a font is set to 0.
 * 
 * @author Villu Ruusmann
 */
public final class CFFISOAdobeCharset extends CFFCharsetType1
{
    private static final int CHAR_CODE = 0;
    private static final int CHAR_NAME = 1;
    
    private CFFISOAdobeCharset()
    {
        // Table of character codes and their corresponding names.
        Object[][] cffIsoAdobeCharsetTable = {
                {0, ".notdef"},
                {1, "space"},
                {2, "exclam"},
                {3, "quotedbl"},
                {4, "numbersign"},
                {5, "dollar"},
                {6, "percent"},
                {7, "ampersand"},
                {8, "quoteright"},
                {9, "parenleft"},
                {10, "parenright"},
                {11, "asterisk"},
                {12, "plus"},
                {13, "comma"},
                {14, "hyphen"},
                {15, "period"},
                {16, "slash"},
                {17, "zero"},
                {18, "one"},
                {19, "two"},
                {20, "three"},
                {21, "four"},
                {22, "five"},
                {23, "six"},
                {24, "seven"},
                {25, "eight"},
                {26, "nine"},
                {27, "colon"},
                {28, "semicolon"},
                {29, "less"},
                {30, "equal"},
                {31, "greater"},
                {32, "question"},
                {33, "at"},
                {34, "A"},
                {35, "B"},
                {36, "C"},
                {37, "D"},
                {38, "E"},
                {39, "F"},
                {40, "G"},
                {41, "H"},
                {42, "I"},
                {43, "J"},
                {44, "K"},
                {45, "L"},
                {46, "M"},
                {47, "N"},
                {48, "O"},
                {49, "P"},
                {50, "Q"},
                {51, "R"},
                {52, "S"},
                {53, "T"},
                {54, "U"},
                {55, "V"},
                {56, "W"},
                {57, "X"},
                {58, "Y"},
                {59, "Z"},
                {60, "bracketleft"},
                {61, "backslash"},
                {62, "bracketright"},
                {63, "asciicircum"},
                {64, "underscore"},
                {65, "quoteleft"},
                {66, "a"},
                {67, "b"},
                {68, "c"},
                {69, "d"},
                {70, "e"},
                {71, "f"},
                {72, "g"},
                {73, "h"},
                {74, "i"},
                {75, "j"},
                {76, "k"},
                {77, "l"},
                {78, "m"},
                {79, "n"},
                {80, "o"},
                {81, "p"},
                {82, "q"},
                {83, "r"},
                {84, "s"},
                {85, "t"},
                {86, "u"},
                {87, "v"},
                {88, "w"},
                {89, "x"},
                {90, "y"},
                {91, "z"},
                {92, "braceleft"},
                {93, "bar"},
                {94, "braceright"},
                {95, "asciitilde"},
                {96, "exclamdown"},
                {97, "cent"},
                {98, "sterling"},
                {99, "fraction"},
                {100, "yen"},
                {101, "florin"},
                {102, "section"},
                {103, "currency"},
                {104, "quotesingle"},
                {105, "quotedblleft"},
                {106, "guillemotleft"},
                {107, "guilsinglleft"},
                {108, "guilsinglright"},
                {109, "fi"},
                {110, "fl"},
                {111, "endash"},
                {112, "dagger"},
                {113, "daggerdbl"},
                {114, "periodcentered"},
                {115, "paragraph"},
                {116, "bullet"},
                {117, "quotesinglbase"},
                {118, "quotedblbase"},
                {119, "quotedblright"},
                {120, "guillemotright"},
                {121, "ellipsis"},
                {122, "perthousand"},
                {123, "questiondown"},
                {124, "grave"},
                {125, "acute"},
                {126, "circumflex"},
                {127, "tilde"},
                {128, "macron"},
                {129, "breve"},
                {130, "dotaccent"},
                {131, "dieresis"},
                {132, "ring"},
                {133, "cedilla"},
                {134, "hungarumlaut"},
                {135, "ogonek"},
                {136, "caron"},
                {137, "emdash"},
                {138, "AE"},
                {139, "ordfeminine"},
                {140, "Lslash"},
                {141, "Oslash"},
                {142, "OE"},
                {143, "ordmasculine"},
                {144, "ae"},
                {145, "dotlessi"},
                {146, "lslash"},
                {147, "oslash"},
                {148, "oe"},
                {149, "germandbls"},
                {150, "onesuperior"},
                {151, "logicalnot"},
                {152, "mu"},
                {153, "trademark"},
                {154, "Eth"},
                {155, "onehalf"},
                {156, "plusminus"},
                {157, "Thorn"},
                {158, "onequarter"},
                {159, "divide"},
                {160, "brokenbar"},
                {161, "degree"},
                {162, "thorn"},
                {163, "threequarters"},
                {164, "twosuperior"},
                {165, "registered"},
                {166, "minus"},
                {167, "eth"},
                {168, "multiply"},
                {169, "threesuperior"},
                {170, "copyright"},
                {171, "Aacute"},
                {172, "Acircumflex"},
                {173, "Adieresis"},
                {174, "Agrave"},
                {175, "Aring"},
                {176, "Atilde"},
                {177, "Ccedilla"},
                {178, "Eacute"},
                {179, "Ecircumflex"},
                {180, "Edieresis"},
                {181, "Egrave"},
                {182, "Iacute"},
                {183, "Icircumflex"},
                {184, "Idieresis"},
                {185, "Igrave"},
                {186, "Ntilde"},
                {187, "Oacute"},
                {188, "Ocircumflex"},
                {189, "Odieresis"},
                {190, "Ograve"},
                {191, "Otilde"},
                {192, "Scaron"},
                {193, "Uacute"},
                {194, "Ucircumflex"},
                {195, "Udieresis"},
                {196, "Ugrave"},
                {197, "Yacute"},
                {198, "Ydieresis"},
                {199, "Zcaron"},
                {200, "aacute"},
                {201, "acircumflex"},
                {202, "adieresis"},
                {203, "agrave"},
                {204, "aring"},
                {205, "atilde"},
                {206, "ccedilla"},
                {207, "eacute"},
                {208, "ecircumflex"},
                {209, "edieresis"},
                {210, "egrave"},
                {211, "iacute"},
                {212, "icircumflex"},
                {213, "idieresis"},
                {214, "igrave"},
                {215, "ntilde"},
                {216, "oacute"},
                {217, "ocircumflex"},
                {218, "odieresis"},
                {219, "ograve"},
                {220, "otilde"},
                {221, "scaron"},
                {222, "uacute"},
                {223, "ucircumflex"},
                {224, "udieresis"},
                {225, "ugrave"},
                {226, "yacute"},
                {227, "ydieresis"},
                {228, "zcaron"}
        };
        int gid = 0;
        for (Object[] charsetEntry : cffIsoAdobeCharsetTable)
        {
            addSID(gid++, (Integer) charsetEntry[CHAR_CODE], charsetEntry[CHAR_NAME].toString());
        }
    }

    /**
     * Returns an instance of the CFFExpertSubsetCharset class.
     * @return an instance of CFFExpertSubsetCharset
     */
    public static CFFISOAdobeCharset getInstance()
    {
        return CFFISOAdobeCharset.INSTANCE;
    }

    private static final CFFISOAdobeCharset INSTANCE = new CFFISOAdobeCharset();

}
